package br.com.ruidobrasil.util.componentes.upload {
	
	import br.com.ruidobrasil.manterpublicacao.PublicacaoEdicao;
	import br.com.ruidobrasil.util.TratamentoErros;
	import br.com.ruidobrasil.vo.PublicacaoVO;
	
	import flash.display.Bitmap;
	import flash.display.Loader;
	import flash.display.LoaderInfo;
	import flash.events.Event;
	import flash.events.IOErrorEvent;
	import flash.events.MouseEvent;
	
	import mx.controls.Alert;
	import mx.controls.Image;
	import mx.controls.Label;
	import mx.events.CloseEvent;
	import mx.events.FlexEvent;
	import mx.rpc.events.FaultEvent;
	import mx.rpc.events.ResultEvent;
	
	public class Imagem extends ImagemView {
		
		private var _telaPai: PublicacaoEdicao;
		private var _vo: PublicacaoVO;
		
		public function Imagem(vo: PublicacaoVO, telaPai: PublicacaoEdicao) {
			super();
			
			this.addEventListener(FlexEvent.CREATION_COMPLETE, init);
			
			_vo = vo;
			_telaPai = telaPai;
		}
		
		private function init(event: FlexEvent): void {
			
			var loader: Loader = new Loader();
			var img: Image = new Image();
			
			img.name = _vo.idImagemPublicacao;
			img.x = 0;
			img.y = 0;
			
			
			loader.mask = img;
			
			this.cnvImagem.addChild(img);
			
			loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadComplete, false, 0, true);
			loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, onLoadError);
			loader.loadBytes(_vo.imagemPublicacao);
			
			rm.removerImagem.addEventListener(ResultEvent.RESULT, resultRemoverImagem);
			rm.removerImagem.addEventListener(FaultEvent.FAULT, TratamentoErros.fault);
			btnRemover.addEventListener(MouseEvent.CLICK, clickRemover);
		}
		
		private function onLoadComplete(e: Event): void {
			var loaderInfo: LoaderInfo = e.target as LoaderInfo;
			var img: Image = new Image();
			var bitMap: Bitmap = loaderInfo.loader.content as Bitmap;
			img.source = bitMap;

			var child: Image = this.cnvImagem.getChildByName(loaderInfo.loader.mask.name) as Image;
			
			if (child == null) {
				
				var lbl: Label = new Label();
				lbl.text = "Aguarde... Carregando a imagem...";
				this.cnvImagem.addChild(lbl);
				
			} else {
				var index: int = this.cnvImagem.getChildIndex(child);
				this.cnvImagem.removeChildAt(index);
				this.cnvImagem.addChildAt(img, index);
			}
		}
		
		private function onLoadError(e: Event): void {
			var lbl: Label = new Label();
			lbl.text = "Erro na exibição da imagem da assinatura.";
			this.cnvImagem.addChild(lbl);
		}
		
		private function clickRemover(event: MouseEvent): void {
			Alert.yesLabel = "Sim";
            Alert.noLabel = "Não";
			Alert.show("Deseja realmente remover esta imagem?", "Remoção", 1|2, this, remover);
		}
		
		private function remover(event: CloseEvent): void {
			if (event.detail == Alert.YES) {
				rm.removerImagem(_vo);
			}
		}
		
		private function resultRemoverImagem(event: ResultEvent): void {
			Alert.show("Imagem removida com sucesso.", "Aviso!");
			_telaPai.obterImagensPublicacao();
		}
	}
}